﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Etna.Exportaciones.Rn;
using Etna.Exportaciones.En;

namespace WebExportaciones
{
    public partial class frmLista_Cliente : System.Web.UI.Page
    {
        protected List<EnCliente> loEnCliente;
        private int iPaginaActual;
        private int iTotalPaginas;
        private int iPaginaInicial;
        private bool bDirectoPagina;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                RnCliente oRnCliente = new RnCliente();
                loEnCliente = oRnCliente.Listar(0);
                hdfPaginaActual.Value = "0";
                Session["ContenidoGrilla"] = loEnCliente;
                EnlazarGridView();
            }
            else
            {
                loEnCliente = (List<EnCliente>)Session["ContenidoGrilla"];
            }
        }

        protected void EventoTecladoTxtPagina(object sender, EventArgs e)
        {
            bDirectoPagina = true;
            TextBox oTextBox = (TextBox)sender;
            PaginarPorNumero(oTextBox);
        }

        protected void EventoTecladoTxtBuscar(object sender, EventArgs e)
        {
            TextBox oTextBox = (TextBox)sender;
            Buscar(oTextBox);
        }

        protected void AccionBuscar(object sender, EventArgs e)
        {
            if (bDirectoPagina == false)
            {
                Buscar(txtFiltro);
                if (sender.GetType() == txtFiltro.GetType())
                {
                    txtFiltro.Focus();
                }
            }
            else
            {
                bDirectoPagina = false;
            }
        }
        protected void AccionNuevo(object sender, EventArgs e)
        {
            InsertarDatos();
        }

        protected void Ordenar(object sender, GridViewSortEventArgs e)
        {

        }

        protected void Paginar(object sender, EventArgs e)
        {
            Button btnLlamada = (Button)sender;
            PaginarPorBoton(btnLlamada);
        }

        protected void AccionEliminar(object sender, EventArgs e)
        {

        }

        void PaginarPorNumero(TextBox poTextBox)
        {
            int iNuevoNumeroPagina;
            int iTotalPaginas;
            lblMensajeError.Text = "";

            int.TryParse(lblTotalPaginas.Text, out iTotalPaginas);


            if (poTextBox.Text.Trim().Length > 0)
            {
                if (int.TryParse(poTextBox.Text.Trim(), out iNuevoNumeroPagina))
                {
                    if ((iNuevoNumeroPagina > 0) && (iNuevoNumeroPagina <= iTotalPaginas))
                    {
                        gvCliente.PageIndex = iNuevoNumeroPagina - 1;
                        hdfPaginaActual.Value = (iNuevoNumeroPagina - 1).ToString();
                    }
                    else
                    {
                        lblMensajeError.Text = "El valor ingresado está fuera del rango de páginas permitido. Por favor revisar.";
                        poTextBox.Focus();
                    }
                }
                else
                {
                    lblMensajeError.Text = "El valor ingresado debe ser numérico. Por favor revisar.";
                    poTextBox.Focus();
                }
            }
            EnlazarGridView();
        }

        void PaginarPorBoton(Button pbtnLlamada)
        {
            loEnCliente = (List<EnCliente>)Session["ContenidoGrilla"];
            string sParametro;
            int iPaginaNueva = 0;

            sParametro = pbtnLlamada.CommandArgument;
            switch (sParametro)
            {
                case "-2":
                    // opción Primero
                    iPaginaNueva = 0;
                    break;
                case "-1":
                    // opción Anterior
                    iPaginaNueva = int.Parse(hdfPaginaActual.Value) - 1;
                    if (iPaginaNueva < 0)
                    {
                        iPaginaNueva = 0;
                    }
                    break;
                case "+1":
                    // opción siguiente
                    iPaginaNueva = int.Parse(hdfPaginaActual.Value) + 1;
                    if (iPaginaNueva >= int.Parse(lblTotalPaginas.Text))
                    {
                        iPaginaNueva = int.Parse(lblTotalPaginas.Text) - 1;
                    }
                    break;
                case "+2":
                    // opción último
                    iPaginaNueva = int.Parse(lblTotalPaginas.Text) - 1;
                    break;
                default:
                    if (!int.TryParse(sParametro, out iPaginaNueva))
                    {
                        iPaginaNueva = int.Parse(hdfPaginaActual.Value);
                    }
                    break;
            }

            if (iPaginaNueva >= 0)
            {
                gvCliente.PageIndex = iPaginaNueva;
                hdfPaginaActual.Value = iPaginaNueva.ToString();
            }
            hdfPaginaActual.Value = iPaginaNueva.ToString();
            EnlazarGridView();
        }

        void Buscar(TextBox poTextBox)
        {
            int valor;
            lblMensajeError.Text = "";

            if (int.TryParse(poTextBox.Text, out valor))
            {
                CargarGrillaDesdeBD(valor);
            }
            else
            {
                if (poTextBox.Text.Trim().Length == 0)
                {
                    valor = 0;
                    CargarGrillaDesdeBD(valor);
                }
                else
                {
                    lblMensajeError.Text = "El valor ingresado debe ser numérico. Por favor revisar.";
                    poTextBox.Focus();
                }
            }
        }

        void CargarGrillaDesdeBD(int valor)
        {
            RnCliente oRnCliente = new RnCliente();
            loEnCliente = oRnCliente.Listar(valor);
            hdfPaginaActual.Value = "0";
            Session["ContenidoGrilla"] = loEnCliente;
            gvCliente.PageIndex = 0;
            EnlazarGridView();
        }

        private void EnlazarGridView()
        {
            int iPosicion;

            if (loEnCliente != null)
            {
                gvCliente.DataSource = loEnCliente;
                gvCliente.DataBind();

                iPaginaActual = int.Parse(hdfPaginaActual.Value);
                iTotalPaginas = gvCliente.PageCount;
                iPaginaInicial = (int)Math.Floor((double)(iPaginaActual / 5)) * 5;
                iPosicion = iPaginaActual - iPaginaInicial;
                lblTotalRegistros.Text = loEnCliente.Count.ToString();
            }
            else
            {
                iPaginaActual = 0;
                iTotalPaginas = 0;
                iPaginaInicial = 0;
                iPosicion = 0;
                lblTotalRegistros.Text = "0";
            }

            lblTotalPaginas.Text = iTotalPaginas.ToString();

            // Boton 1
            if (iPaginaInicial + 1 > iTotalPaginas)
            {
                btnPagina1.Visible = false;
            }
            else
            {
                btnPagina1.Visible = true;
                btnPagina1.Text = (iPaginaInicial + 1).ToString();
                btnPagina1.CommandArgument = iPaginaInicial.ToString();
                if (iPosicion == 0)
                {
                    btnPagina1.ForeColor = System.Drawing.Color.White;
                    btnPagina1.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina1.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 2
            if (iPaginaInicial + 2 > iTotalPaginas)
            {
                btnPagina2.Visible = false;
            }
            else
            {
                btnPagina2.Visible = true;
                btnPagina2.Text = (iPaginaInicial + 2).ToString();
                btnPagina2.CommandArgument = (iPaginaInicial + 1).ToString();
                if (iPosicion == 1)
                {
                    btnPagina2.ForeColor = System.Drawing.Color.White;
                    btnPagina2.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina2.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina2.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 3
            if (iPaginaInicial + 3 > iTotalPaginas)
            {
                btnPagina3.Visible = false;
            }
            else
            {
                btnPagina3.Visible = true;
                btnPagina3.Text = (iPaginaInicial + 3).ToString();
                btnPagina3.CommandArgument = (iPaginaInicial + 2).ToString();
                if (iPosicion == 2)
                {
                    btnPagina3.ForeColor = System.Drawing.Color.White;
                    btnPagina3.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina3.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina3.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 4
            if (iPaginaInicial + 4 > iTotalPaginas)
            {
                btnPagina4.Visible = false;
            }
            else
            {
                btnPagina4.Visible = true;
                btnPagina4.Text = (iPaginaInicial + 4).ToString();
                btnPagina4.CommandArgument = (iPaginaInicial + 3).ToString();
                if (iPosicion == 3)
                {
                    btnPagina4.ForeColor = System.Drawing.Color.White;
                    btnPagina4.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina4.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina4.BackColor = System.Drawing.Color.White;
                }
            }
            // Boton 5
            if (iPaginaInicial + 5 > iTotalPaginas)
            {
                btnPagina5.Visible = false;
            }
            else
            {
                btnPagina5.Visible = true;
                btnPagina5.Text = (iPaginaInicial + 5).ToString();
                btnPagina5.CommandArgument = (iPaginaInicial + 4).ToString();
                if (iPosicion == 4)
                {
                    btnPagina5.ForeColor = System.Drawing.Color.White;
                    btnPagina5.BackColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                }
                else
                {
                    btnPagina5.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF6600");
                    btnPagina5.BackColor = System.Drawing.Color.White;
                }
            }
        }

        protected void gvCliente_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Select")
            {
                int indice = int.Parse(e.CommandArgument.ToString());
                string Comando;
                EnlazarGridView();
                Comando = string.Format("VerMantenimiento('Mod','{0}');", ((GridView)sender).Rows[indice].Cells[1].Text);
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Modificar", Comando, true);
            }
        }

        private void InsertarDatos()
        {
            string Comando;
            EnlazarGridView();
            Comando = "VerMantenimiento('Ins','0');";
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Insertar", Comando, true);
        }
    }
}